#include <iostream>
#include <string>
#include <vector>
using namespace std;
void RemoveSpace(string& s);
int main()
{
    string s;
    getline(cin,s);
    cout<<s<<endl;
    RemoveSpace(s);
    cout<<s;
    return 0;
}

//1.输入一个数组和一个目标数，返回不含该目标数的数组（原地修改数组，只返回前不为目标数的位数），返回最后的数组长度
/*
使用双指针方法，快指针为要进行判断的位置，慢指针是更新到的新数组末尾
相同则慢指针不变，快指针下一位
不同则将快指针指向的数复制到慢指针上，慢指针加一
*/
int removeElement(vector<int>& nums,int val)
{
    int fast=0;
    int slow=0;
    for(fast=0;fast<nums.size();fast++)
    {
        if(nums[fast]==nums[slow])
            continue;
        else
            nums[slow++]=nums[fast];
    }
    return slow;
    //slow最后是以确定的最终数组的下一位，刚好是最终确定的数组长度
}
//2.输入一个字符串，删除开头结尾和中间多余的空格（中间只留一个），原理和移除数字数组的一样
//最后使用resize调整字符串长度删除最后的空格
//也是慢指针决定最后长度，快指针遍历
void RemoveSpace(string& s)
{
    int fast=0;
    int slow=0;
    //先移除开头空格
    while(fast<s.size()&&s[fast]==' ')  
        fast++;
    //移除中间,但保留一个空格
    for(fast;fast<s.size();fast++)
    {
        if(s[fast]==' '&&s[fast]==s[fast-1])//第二个条件保留每个单词后面一个空格
            continue;
        else
            s[slow++]=s[fast];          //填了几次slow的长度就是多少
    }
    //消除最后一个单词后面的空格.
    if(s[slow-1]==' ')//注意是slow-1，因为最后一次填上时slow有加一
        slow--;
    cout<<slow;
    s.resize(slow);//将字符串长度减为slow
}